#pragma once
#include <process.h>
#include <winsock2.h>
#include "../CommonUtil/UtilService.h"

class CUser
{
public:
	CUser(int sock);
	~CUser(void);

	const char* GetAccount() { return m_szAccount; }

public:
	void Start();
	void Stop();
	bool IsStopped() { return m_hThrd == NULL; }

private:
	static void worker(void* pParam);
	void SendMsg(MSG_BASE* pMsg);

private://message processing function
	void processMsg(MSG_BASE* pMsg);

	void onMsgUserReg(MSG_USER_REG& msg);	//MSGTYPE_USER_REG
	void onMsgUserAuth(MSG_USER_AUTH& msg);//MSGTYPE_USER_AUTH
	void onMsgRouteSel(MSG_ROUTE_SEL& msg);	//MSGTYPE_ROUTE_SEL

	void onMsgCusReserve(MSG_CUST_RESERV& msg);//MSGTYPE_CUST_RESERV
	void onMsgViewOrder(MSG_VIEW_ORDER_REQUEST& msg);//MSGTYPE_VIEW_ORDER_REQUEST
	void onMsgCancelOrder(MSG_CANCEL_ORDER& msg);//MSGTYPE_CANCEL_ORDER
	void onMsgAirLineAuth(MSG_AIRLINE_AUTH& msg);//MSGTYPE_AIRLINE_AUTH
	void onMsgAirLineAddRoute(MSG_AIRLINE_ADDROUTE& msg); //MSGTYPE_AIRLINE_ADDROUTE
	void onMsgViewRoute();

private:
	bool m_bCustomer;
	bool m_bAuthSuccess;
	char m_szAccount[1024];
	IMsgSplitter* m_pMsgSplitter;
	SOCKET m_sock;
	HANDLE m_hThrd;
	HANDLE m_event;
};

